<?php
/**
 * 缩略图
 * 图片大小的格式化,使之成为固定大小的文件图片
 * @param string $srcImage 原图片的路径信息
 * @param int $width 指定图片格式化后的宽度(图片高度按照宽度缩放比率,自适应)
 * @param string $fileDir 生成的文件的存放目录 如 /test/images/
 * @return bool
 */

function imageSizeFormate($srcImage,$wight,$height,$fileDir)
{
    // 获得原图片尺寸

    $srcSize = getimagesize($srcImage);
    if(!$srcSize) {
        exit('not get image');
    }

    if($srcSize[0] == 147 && $srcSize[1] == 206) {
        return $srcImage;
    }
    
    //var_dump($srcSize);exit;
    if($wight/$srcSize[0] > $height/$srcSize[1]) {//宽大于高
        $rwidth = round($srcSize[0]*$height/$srcSize[1]);
        $rheight = $height;
        $y = 0;
        $x = ($wight-$rwidth)/2;
    }else{//高大于等于宽
        $rheight = round($srcSize[1]*$wight/$srcSize[0]);
        $rwidth = $wight;
        $x = 0;
        $y = ($height-$rheight)/2;
    }
    /* 创建真彩色的临时文件,指定大小 */
    $tmpImage = imagecreatetruecolor($wight,$height);
    // 原图片的资源,判断类型
    if($srcSize['mime'] == 'image/gif') {
        $srcImageSource = imagecreatefromgif($srcImage);
    }elseif($srcSize['mime'] == 'image/png'){
        $srcImageSource = imagecreatefrompng($srcImage);
    }elseif($srcSize['mime'] == 'image/bmp'){
        $srcImageSource = imagecreatefromwbmp($srcImage);
    }else{
        $srcImageSource = imagecreatefromjpeg($srcImage);
    }
    // 重新采样拷贝图像并调整大小
    $bai = imagecolorallocate($tmpImage, 255, 255, 255);
    imagefill($tmpImage, 0, 0, $bai);

    imagecopyresampled($tmpImage,$srcImageSource,$x,$y,0,0,$rwidth,$rheight,$srcSize[0],$srcSize[1]);
    /* 生成 JPEG 格式的新文件,存放在test目录下 */
    // 以时间戳作为文件名
    $aFileName = explode("/",$srcImage);
    if(count($aFileName) <= 0) {
        exit('image path is error');
    }
    $iFinish = count($aFileName) - 1;
    $aFileName = explode(".",$aFileName[$iFinish]);
    $sFileName = $aFileName[0];
    $dstPath = $fileDir."/".$sFileName.$rwidth.$rheight.".jpg";
    imagejpeg($tmpImage,$dstPath);
	$data = array(
		'new' => $srcImage,
		'preview' => $dstPath,
	);
    return $data;
}


/**
 * 下载远程图片
 * @param string $url 图片的绝对url
 * @param string $filepath 文件的完整路径（包括目录，不包括后缀名,例如/www/images/test） ，此函数会自动根据图片url和http头信息确定图片的后缀名
 * @return mixed 下载成功返回一个描述图片信息的数组，下载失败则返回false
 */
function downloadImage($url, $filepath) {
    //服务器返回的头信息
    $responseHeaders = array();
    //原始图片名
    $originalfilename = '';
    //图片的后缀名
    $ext = '';
    $ch = curl_init($url);
    //设置curl_exec返回的值包含Http头
    curl_setopt($ch, CURLOPT_HEADER, 1);
    //设置curl_exec返回的值包含Http内容
    curl_setopt($ch, CURLOPT_RETURNTRANSFER, 1);        
    //设置抓取跳转（http 301，302）后的页面
    curl_setopt($ch, CURLOPT_FOLLOWLOCATION, 1);
    //设置最多的HTTP重定向的数量
    curl_setopt($ch, CURLOPT_MAXREDIRS, 2);

    //服务器返回的数据（包括http头信息和内容）
    $html = curl_exec($ch);
	//var_dump($html);
    //获取此次抓取的相关信息
    $httpinfo = curl_getinfo($ch);
    curl_close($ch);
    if ($html !== false) {
        //分离response的header和body，由于服务器可能使用了302跳转，所以此处需要将字符串分离为 2+跳转次数 个子串
        $httpArr = explode("\r\n\r\n", $html, 2 + $httpinfo['redirect_count']);
        //倒数第二段是服务器最后一次response的http头
        $header = $httpArr[count($httpArr) - 2];
        //倒数第一段是服务器最后一次response的内容
        $body = $httpArr[count($httpArr) - 1];
        $header.="\r\n";

        //获取最后一次response的header信息
        preg_match_all('/([a-z0-9-_]+):\s*([^\r\n]+)\r\n/i', $header, $matches);
        if (!empty($matches) && count($matches) == 3 && !empty($matches[1]) && !empty($matches[1])) {
            for ($i = 0; $i < count($matches[1]); $i++) {
                if (array_key_exists($i, $matches[2])) {
                    $responseHeaders[$matches[1][$i]] = $matches[2][$i];
                }
            }
        }
        //获取图片后缀名
        if (0 < preg_match('{(?:[^\/\\\\]+)\.(jpg|jpeg|gif|png|bmp)$}i', $url, $matches)) {
            $originalfilename = $matches[0];
            $ext = $matches[1];
        } else {
            if (array_key_exists('Content-Type', $responseHeaders)) {
                if (0 < preg_match('{image/(\w+)}i', $responseHeaders['Content-Type'], $extmatches)) {
                    $ext = $extmatches[1];
                }
            }
        }
        $path = time().rand(1000,9999);
        //保存文件
        if (!empty($ext)) {
            $filepath .= '/'.$path.".".$ext;
            //如果目录不存在，则先要创建目录
            if( !is_dir( dirname($filepath) ) ) {
                @mkdir(dirname($filepath) ,0777, true );
            }else{
                @chmod(dirname($filepath), 0777);
            }
            $local_file = fopen($filepath, 'wb');
            if (false !== $local_file) {
                if (false !== fwrite($local_file, $body)) {
                    fclose($local_file);
                    $sizeinfo = getimagesize($filepath);
                    return $filepath;
                }
            }
        }
    }
    return false;
}
